<?php

class ClientsController extends AppController {

    var $name = 'Clients';
    var $uses = array('Client','Province', 'Car', 'Record'); //aca le decis cuales modelos vas a usar
    var $helpers = array('Html', 'Form', 'Javascript');
    
    function beforeFilter() {
        parent::beforeFilter();
        
        //si no es un usuario con nivel = 3 o 1 no lo dejo acceder a las siguientes funciones de este controlador
        if (in_array($this->action, array('index','add', 'edit', 'delete', 'view', 'agregar_auto')) and $this->Auth->user('id') and !(in_array($this->Auth->user('level'), array(1,3)))) {
            $this->redirect(array('user' => false, 'controller' => 'articles', 'action' => 'inicio'));
        }
    }

    function index() {
        $this->Article->recursive = 0;

        //si vienen filtros aplicados
        if (!empty($this->data)) {
            $datos = $this->data['Client'];
            $filtro = '';

            if (isset($datos['apellido']) && trim($datos['apellido']) != '') {
                $filtro .= " Client.last_name = '" . strtoupper($datos['apellido']) . "'";
            }
            if (isset($datos['nombre']) && trim($datos['nombre']) != '') {
                if (isset($datos['apellido']) && trim($datos['apellido']) != '') {
                    $filtro .= " AND Client.first_name = '" . $datos['nombre'] . "'";
                } else {
                    $filtro .= " Client.first_name = '" . $datos['nombre'] . "'";
                }
            }
            //aca seguis agregando los filtros que quieras

            $this->paginate['order'] = array('Client.last_name' => 'ASC');
            $resultados = $this->paginate('Client', array($filtro));

            $this->set('clients', $resultados);

            //guardo el filtro usado en session para despues recordarlo con el paginate
            $restricciones = array('filter' => $filtro, 'order' => $this->paginate['order']);
            $this->Session->write('search_conditions_clients', $restricciones);
        } elseif ($this->Session->check('search_conditions_clients')) {

            //si habia algun filtro guardado en session lo tengo que tomar y seguir aplicando el mismo
            //si estoy paginando
            if (isset($this->params['named']['limit']) || isset($this->params['named']['page'])) {
                $restricciones = $this->Session->read('search_conditions_clients');

                //si esta acomodando por algun campo en particular
                if (isset($this->params['named']['sort'])) {
                    $this->paginate['order'] = array($this->params['named']['sort'] => $this->params['named']['sort']['direction']);
                } else {
                    //sino sigo aplicando el mismo que ya venia
                    $this->paginate['order'] = $restricciones['order'];
                }
                //si hay que seguir el filtro de empleados
                $resultados = $this->paginate('Client', array($restricciones['filter']));

                $this->set('clients', $resultados);
            } else {
                //lo borro de la session
//                $filtro = ' Article.termination_date is NULL ';
                $this->Session->delete('search_conditions_clients');
                $this->paginate['order'] = array('Client.last_name' => 'ASC');
                $resultados = $this->paginate('Car');
                $this->set('clients', $resultados);
            }
        } else {

            //le pongo un filtro por default
//            $filtro = ' Article.termination_date is NULL ';
            $this->paginate['order'] = array('Client.last_name' => 'ASC');
            $resultados = $this->paginate('Client');
            $this->set('clients', $resultados);
        }
    }

    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Cliente invalido', true));
            $this->redirect(array('action' => 'index'));
        }
        $autos = $this->Car->find('all', array('conditions' => array('Car.client_id' => $id)));
//        pr($autos);die;
        $cars = array();
        foreach ($autos as $aut) {
            $cars[$aut['Car']['id']] = $aut;
        }
//        pr($cars);die;
        $this->set('cars', $cars);
        $this->set('client', $this->Client->read(null, $id));
        
//        $this->Client->recursive = 2;
//        pr($this->Client->read(null, $id));
//        die;
    }

    function add() {
        if (!empty($this->data)) {
            $datos = $this->data;
            $datos['Client']['high_date'] = date('Y-m-d H:i:s');
//            pr($datos);die;
            $this->Client->create();
            if ($this->Client->save($datos['Client'])) {
//                $this->Session->setFlash(__('El cliente fue guardado', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('El cliente no fue guardado. Por favor, intente de nuevo.', true));
            }
        }
        $provinces = $this->Client->Province->find('list');
        $this->set(compact('provinces'));
    }
    
    function agregar_auto($id = null) {
        if (!empty($this->data)) {
            $datos = $this->data['Client'];
//            pr($datos);die;
            $datos['letter'] = strtoupper($datos['letter']);
            $this->Car->create();
//            pr($datos);
            if ($this->Car->save($datos)) {
//                $client_id = $this->Car->client_id; //despues de un save, asi obtenes el id del registro que guardarste
//                pr($client_id);die;
//                $this->Session->setFlash(__('El auto fue guardado', true));
                $this->redirect(array('controller' => 'clients','action' => 'view', $datos['client_id']));
            } else {
                $this->Session->setFlash(__('El auto no fue guardado. Por favor, intente de nuevo.', true));
            }
        }
//        $clientes = $this->Client->find('all', array('fields' => array('Client.first_name', 'Client.last_name', 'Client.id')));
//        $clients = array();
//        foreach ($clientes as $cli) {
//            $clients[$cli['Client']['id']] = $cli['Client']['last_name'] . ' ' . $cli['Client']['first_name'];
//        }
//		$clients = $this->Car->Client->find('list');
//        $keys = $this->Car->Key->find('list');
//        $this->set(compact('keys'));
        $this->set('valor_id', $id);
    }

    function edit($id = null) {
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Cliente invalido', true));
            $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            $array_datos = $this->data;
//                    pr($array_datos);die;
            list($d, $m, $a) = explode("/", $array_datos['Client']['high_date']);
            $fecha_aux = $a . "-" . $m . "-" . $d;
            $array_datos['Client']['high_date'] = $fecha_aux;
            
            $fecha_actual = date('Y-m-d');
            if($fecha_aux <= $fecha_actual){
                if ($this->Client->save($array_datos)) {
    //                $this->Session->setFlash(__('El cliente fue guardado', true));
                    $this->redirect(array('action' => 'index'));
                } else {
                    $this->Session->setFlash(__('El cliente no fue guardado. Por favor, intente de nuevo.', true));
                }
            }else {
                    $this->Session->setFlash(__('El cliente no fue guardado. Verifique que la Fecha de Alta sea menor que la fecha actual.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->Client->read(null, $id);
            $this->data['Client']['high_date'] = date('d/m/Y', strtotime($this->data['Client']['high_date']));
        }
        $provinces = $this->Client->Province->find('list');
        $this->set(compact('provinces'));
    }

    function delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Cliente invalido', true));
            $this->redirect(array('action' => 'index'));
        }
        $contar_autos = $this->Car->find('count', array('conditions' => array('Car.client_id' => $id)));//Si el cliente posee autos
        $contar_historial = $this->Record->find('count', array('conditions' => array('Record.client_id' => $id)));//Si el cliente esta asociado con algun historial
//        pr($contar_autos);die;
        if($contar_autos == 0 && $contar_historial == 0){//Si no tiene autos asociado lo elimino!
            if ($this->Client->delete($id)) {
                $this->Session->setFlash(__('Cliente eliminado', true));
                $this->redirect(array('action' => 'index'));
            }
        }
        $this->Session->setFlash(__('El cliente no pudo ser eliminado. Verifique si tiene autos asociados o registra algun historial', true));
        $this->redirect(array('action' => 'view', $id));
    }

}
